Barcodes are graphical representations of data, the most common of which are referred to as one dimensional (1D) and two dimensional (2D) barcodes. 1D barcodes are images that represent data by varying the widths and spacings of parallel lines. 2D barcodes are also images that represent data, but in addition to the parallel lines, or bars, a 2D barcodes may contain rectangles, dots, hexagons and other geometric patterns in two dimensions. The data encoded in the barcodes are interpreted by optical scanners and/or software. Barcodes can be scanned by special optical scanners called barcode readers as well as by general purpose devices such as smart phones.